//package com.braveman.im.ui.weiget.photopicker;
//
//import android.app.ProgressDialog;
//import android.content.Context;
//import android.content.Intent;
//import android.content.res.Configuration;
//import android.database.Cursor;
//import android.graphics.Color;
//import android.graphics.drawable.ColorDrawable;
//import android.os.Bundle;
//import android.provider.MediaStore;
//import android.support.v4.app.LoaderManager;
//import android.support.v4.content.CursorLoader;
//import android.support.v4.content.Loader;
//import android.support.v7.app.AppCompatActivity;
//import android.support.v7.widget.ListPopupWindow;
//import android.view.View;
//import android.widget.AdapterView;
//import android.widget.Button;
//import android.widget.GridView;
//import android.widget.LinearLayout;
//import android.widget.ListView;
//import android.widget.PopupWindow;
//import android.widget.TextView;
//import android.widget.Toast;
//
//import com.braveman.im.R;
//import com.braveman.im.ui.weiget.CustomButtons;
//import com.braveman.im.ui.weiget.photopicker.intent.PhotoPreviewIntent;
//
//import java.io.File;
//import java.io.IOException;
//import java.util.ArrayList;
//
//public class PhotoPickerActivity extends AppCompatActivity {
//
//    public static final String TAG = PhotoPickerActivity.class.getName();
//
//    private Context mCxt;
//
//    /**
//     * 图片选择模式，int类型
//     */
//    public static final String EXTRA_SELECT_MODE = "select_count_mode";
//    /**
//     * 单选
//     */
//    public static final int MODE_SINGLE = 0;
//    /**
//     * 多选
//     */
//    public static final int MODE_MULTI = 1;
//    /**
//     * 最大图片选择次数，int类型
//     */
//    public static final String EXTRA_SELECT_COUNT = "max_select_count";
//    /**
//     * 默认最大照片数量
//     */
//    public static final int DEFAULT_MAX_TOTAL = 9;
//    /**
//     * 是否显示相机，boolean类型
//     */
//    public static final String EXTRA_SHOW_CAMERA = "show_camera";
//    /**
//     * 点击图片是否选中，boolean类型
//     */
//    public static final String EXTRA_CLICK_IMAGE = "click_image";
//    /**
//     * 默认选择的数据集
//     */
//    public static final String EXTRA_DEFAULT_SELECTED_LIST = "default_result";
//    /**
//     * 筛选照片配置信息
//     */
//    public static final String EXTRA_IMAGE_CONFIG = "image_config";
//    /**
//     * 选择结果，返回为 ArrayList&lt;String&gt; 图片路径集合
//     */
//    public static final String EXTRA_RESULT = "select_result";
//
//    // 结果数据
//    private ArrayList<String> resultList = new ArrayList<>();
//    // 文件夹数据
//    private ArrayList<Folder> mResultFolder = new ArrayList<>();
//    private ArrayList<String> mAllImagePaths = new ArrayList<>();
//
//    // 不同loader定义
//    private static final int LOADER_ALL = 0;
//    private static final int LOADER_CATEGORY = 1;
//
//    private GridView mGridView;
//    private View mPopupAnchorView;
//    private Button btnAlbum;
//    private Button btnPreview;
//
//    // 最大照片数量
//    private ImageCaptureManager captureManager;
//    public static int mDesireImageCount;
//    private ImageConfig imageConfig; // 照片配置
//
//    private ImageGridAdapter mImageAdapter;
//    private FolderAdapter mFolderAdapter;
//    private ListPopupWindow mFolderPopupWindow;
//
//    private boolean hasFolderGened = false;
//    private boolean mIsShowCamera = false;
//    private boolean mIsClickImage = false;
//    private int mode;
//    private TextView tv_title_bar_title;
//    private TextView discard;
//    private int scrollY;
//    private ProgressDialog progressDialog;
//
//    public int getMode() {
//        return mode;
//    }
//
//    @Override
//    protected void onCreate(Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//
//        progressDialog = new ProgressDialog(this);
//        progressDialog.setMessage("正在加载图片...");
//
//        setContentView(R.layout.activity_photopicker);
//
//        // 照片属性
//        imageConfig = getIntent().getParcelableExtra(EXTRA_IMAGE_CONFIG);
//        // 选择图片数量
//        mDesireImageCount = getIntent().getIntExtra(EXTRA_SELECT_COUNT, DEFAULT_MAX_TOTAL);
//
//        // 图片选择模式
//        mode = getIntent().getExtras().getInt(EXTRA_SELECT_MODE, MODE_SINGLE);
//        // 默认选择
//        if (mode == MODE_MULTI) {
//            ArrayList<String> tmp = getIntent().getStringArrayListExtra(EXTRA_DEFAULT_SELECTED_LIST);
//            if (tmp != null && tmp.size() > 0) {
//                resultList.addAll(tmp);
//            }
//        }
//
//        initViews();
//
//        // 首次加载所有图片
//        if (progressDialog != null && !progressDialog.isShowing()) {
//            progressDialog.show();
//        }
//        getSupportLoaderManager().initLoader(LOADER_ALL, null, mLoaderCallback);
//
//
//        // 是否显示照相机
//        mIsShowCamera = getIntent().getBooleanExtra(EXTRA_SHOW_CAMERA, false);
//        mIsClickImage = getIntent().getBooleanExtra(EXTRA_CLICK_IMAGE, false);
//        mImageAdapter = new ImageGridAdapter(mCxt, mIsShowCamera, getItemImageWidth());
//        // 是否显示选择指示器
//        mImageAdapter.showSelectIndicator(mode == MODE_MULTI);
//        mGridView.setAdapter(mImageAdapter);
//
//        mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
//            @Override
//            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//                if (mImageAdapter.isShowCamera()) {
//                    // 如果显示照相机，则第一个Grid显示为照相机，处理特殊逻辑
//                    if (i == 0) {
//                        if (mode == MODE_MULTI) {
//                            // 判断选择数量问题
//                            if (mDesireImageCount == resultList.size()) {
//                                Toast.makeText(mCxt, "已经达到最高选择数量", Toast.LENGTH_SHORT).show();
//                                return;
//                            }
//                        }
//                        showCameraAction();
//                    } else {
//                        // 正常操作
//                        if (!mIsClickImage) {
//                            Image image = (Image) adapterView.getAdapter().getItem(i);
//                            selectImageFromGrid(image, mode);
//                        } else {
//                            PhotoPreviewIntent intent = new PhotoPreviewIntent(mCxt, mIsClickImage);
//                            intent.setCurrentItem(i-1);
//                            intent.setPhotoPaths(resultList);
//                            intent.setAllPhotoPaths(mAllImagePaths);
//                            startActivityForResult(intent, PhotoPreviewActivity.REQUEST_PREVIEW);
//                        }
//                    }
//                } else {
//                    // 正常操作
//                    if (!mIsClickImage) {
//                        Image image = (Image) adapterView.getAdapter().getItem(i);
//                        selectImageFromGrid(image, mode);
//                    } else {
//                        PhotoPreviewIntent intent = new PhotoPreviewIntent(mCxt, mIsClickImage);
//                        intent.setCurrentItem(i);
//                        intent.setPhotoPaths(resultList);
//                        intent.setAllPhotoPaths(mAllImagePaths);
//                        startActivityForResult(intent, PhotoPreviewActivity.REQUEST_PREVIEW);
//                    }
//                }
//            }
//        });
//
//        mFolderAdapter = new FolderAdapter(mCxt);
//
//        // 打开相册列表
//        btnAlbum.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                if (mFolderPopupWindow == null) {
//                    createPopupFolderList();
//                }
//
//                if (mFolderPopupWindow.isShowing()) {
//                    mFolderPopupWindow.dismiss();
//                } else {
//                    mFolderPopupWindow.show();
//                    int index = mFolderAdapter.getSelectIndex();
//                    index = index == 0 ? index : index - 1;
//                    ListView listView = mFolderPopupWindow.getListView();
//                    listView.setSelection(index);
//                    listView.setScrollY(scrollY);
//                }
//            }
//        });
//
//        // 预览
//        btnPreview.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                PhotoPreviewIntent intent = new PhotoPreviewIntent(mCxt, mIsClickImage);
//                intent.setCurrentItem(0);
//                intent.setPhotoPaths(resultList);
//                intent.setAllPhotoPaths(resultList);
//                startActivityForResult(intent, PhotoPreviewActivity.REQUEST_PREVIEW);
//            }
//        });
//
//    }
//
//    private void initViews() {
//        mCxt = this;
//        captureManager = new ImageCaptureManager(mCxt);
//        // ActionBar Setting
//        LinearLayout ll_title_bar_right = (LinearLayout) findViewById(R.id.ll_title_bar_right);
//        LinearLayout ll_title_bar_left = (LinearLayout) findViewById(R.id.ll_title_bar_left);
//        tv_title_bar_title = (TextView) findViewById(R.id.tv_title_bar_title);
//        tv_title_bar_title.setText("图片");
//        TextView backBtn = CustomButtons.getTitleBarBackBtn(this);
//        discard = CustomButtons.getTitleBarTvBtn(this, "");
//        discard.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                complete();
//            }
//        });
//        backBtn.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                onBackPressed();
//            }
//        });
//        ll_title_bar_left.addView(backBtn);
//        ll_title_bar_right.addView(discard);
//        discard.setVisibility(View.GONE);
//        mGridView = (GridView) findViewById(R.id.grid);
//        mGridView.setNumColumns(getNumColnums());
//
//        mPopupAnchorView = findViewById(R.id.photo_picker_footer);
//        btnAlbum = (Button) findViewById(R.id.btnAlbum);
//        btnPreview = (Button) findViewById(R.id.btnPreview);
//
//        refreshActionStatus();
//    }
//
//    private void createPopupFolderList() {
//
//        mFolderPopupWindow = new ListPopupWindow(mCxt);
//        mFolderPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//        mFolderPopupWindow.setAdapter(mFolderAdapter);
//        mFolderPopupWindow.setContentWidth(ListPopupWindow.MATCH_PARENT);
//        mFolderPopupWindow.setWidth(ListPopupWindow.MATCH_PARENT);
//
//        // 计算ListPopupWindow内容的高度(忽略mPopupAnchorView.height)，R.layout.item_foloer
//        int folderItemViewHeight =
//                // 图片高度
//                getResources().getDimensionPixelOffset(R.dimen.folder_cover_size) +
//                        // Padding Top
//                        getResources().getDimensionPixelOffset(R.dimen.folder_padding) +
//                        // Padding Bottom
//                        getResources().getDimensionPixelOffset(R.dimen.folder_padding);
//        int folderViewHeight = mFolderAdapter.getCount() * folderItemViewHeight;
//
//        int screenHeigh = getResources().getDisplayMetrics().heightPixels;
//        if (folderViewHeight >= screenHeigh) {
//            mFolderPopupWindow.setHeight(Math.round(screenHeigh * 0.6f));
//        } else {
//            mFolderPopupWindow.setHeight(ListPopupWindow.WRAP_CONTENT);
//        }
//
//        mFolderPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
//            @Override
//            public void onDismiss() {
//                scrollY = mFolderPopupWindow.getListView().getScrollY();
//            }
//        });
//
//        mFolderPopupWindow.setAnchorView(mPopupAnchorView);
//        mFolderPopupWindow.setModal(true);
////        mFolderPopupWindow.setAnimationStyle(R.style.Animation_AppCompat_DropDownUp);
//        mFolderPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {
//            @Override
//            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//
//                mFolderAdapter.setSelectIndex(position);
//
//                final int index = position;
//                final AdapterView v = parent;
//
//                mFolderPopupWindow.dismiss();
//
//                if (index == 0) {
//                    if (progressDialog != null && !progressDialog.isShowing()) {
//                        progressDialog.show();
//                    }
//                    getSupportLoaderManager().restartLoader(LOADER_ALL, null, mLoaderCallback);
//                    btnAlbum.setText("所有图片");
//                    mImageAdapter.setShowCamera(mIsShowCamera);
//                } else {
//                    Folder folder = (Folder) v.getAdapter().getItem(index);
//
//                    if (null != folder) {
//                        mAllImagePaths.clear();
//                        mImageAdapter.setData(folder.images);
//                        btnAlbum.setText(folder.name);
//                        for (Image image : folder.images) {
//                            mAllImagePaths.add(image.path);
//                        }
//                        // 设定默认选择
//                        if (resultList != null && resultList.size() > 0) {
//                            mImageAdapter.setDefaultSelected(resultList);
//                        }
//                    }
//                    mImageAdapter.setShowCamera(false);
//
//                }
//                // 滑动到最初始位置
//                mGridView.smoothScrollToPosition(0);
//            }
//        });
//    }
//
//    public void onSingleImageSelected(String path) {
//        Intent data = new Intent();
//        resultList.add(path);
//        data.putStringArrayListExtra(EXTRA_RESULT, resultList);
//        setResult(RESULT_OK, data);
//        finish();
//    }
//
//    public void onImageSelected(String path) {
//        if (!resultList.contains(path)) {
//            resultList.add(path);
//        }
//        refreshActionStatus();
//    }
//
//    public void onImageUnselected(String path) {
//        if (resultList.contains(path)) {
//            resultList.remove(path);
//        }
//        refreshActionStatus();
//    }
//
//    @Override
//    public void onActivityResult(int requestCode, int resultCode, Intent data) {
//        super.onActivityResult(requestCode, resultCode, data);
//
//        if (resultCode == RESULT_OK) {
//            switch (requestCode) {
//                // 相机拍照完成后，返回图片路径
//                case ImageCaptureManager.REQUEST_TAKE_PHOTO:
//                    if (captureManager.getCurrentPhotoPath() != null) {
//                        captureManager.galleryAddPic();
//                        resultList.add(captureManager.getCurrentPhotoPath());
//                    }
//                    complete();
//                    break;
//                // 预览照片
//                case PhotoPreviewActivity.REQUEST_PREVIEW:
//                    ArrayList<String> pathArr = data.getStringArrayListExtra(PhotoPreviewActivity.EXTRA_RESULT);
//                    // 刷新页面
//                    if (pathArr != null && pathArr.size() != resultList.size()) {
//                        resultList = pathArr;
//                        refreshActionStatus();
//                        mImageAdapter.setDefaultSelected(resultList);
//                    }
//                    break;
//            }
//        }
//    }
//
//    @Override
//    public void onConfigurationChanged(Configuration newConfig) {
//        // 重置列数
//        mGridView.setNumColumns(getNumColnums());
//        // 重置Item宽度
//        mImageAdapter.setItemSize(getItemImageWidth());
//
//        if (mFolderPopupWindow != null) {
//            if (mFolderPopupWindow.isShowing()) {
//                mFolderPopupWindow.dismiss();
//            }
//
//            // 重置PopupWindow高度
//            int screenHeigh = getResources().getDisplayMetrics().heightPixels;
//            mFolderPopupWindow.setHeight(Math.round(screenHeigh * 0.6f));
//        }
//
//        super.onConfigurationChanged(newConfig);
//    }
//
//    /**
//     * 选择相机
//     */
//    private void showCameraAction() {
//        try {
//            Intent intent = captureManager.dispatchTakePictureIntent();
//            startActivityForResult(intent, ImageCaptureManager.REQUEST_TAKE_PHOTO);
//        } catch (IOException e) {
//            Toast.makeText(mCxt, "无法启用系统相机", Toast.LENGTH_SHORT).show();
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 选择图片操作
//     *
//     * @param image
//     */
//    public void selectImageFromGrid(Image image, int mode) {
//        if (image != null) {
//            // 多选模式
//            if (mode == MODE_MULTI) {
//                if (resultList.contains(image.path)) {
//                    resultList.remove(image.path);
//                    onImageUnselected(image.path);
//                } else {
//                    // 判断选择数量问题
//                    if (mDesireImageCount == resultList.size()) {
//                        Toast.makeText(mCxt, "已经达到最高选择数量", Toast.LENGTH_SHORT).show();
//                        return;
//                    }
//                    resultList.add(image.path);
//                    onImageSelected(image.path);
//                }
//                mImageAdapter.select(image);
//            } else if (mode == MODE_SINGLE) {
//                // 单选模式
//                onSingleImageSelected(image.path);
//            }
//        }
//    }
//
//    /**
//     * 刷新操作按钮状态
//     */
//    private void refreshActionStatus() {
//        String text = getString(R.string.done_with_count, resultList.size(), mDesireImageCount);
//        discard.setText(text);
//        boolean hasSelected = resultList.size() > 0;
//        discard.setVisibility(hasSelected ? View.VISIBLE : View.GONE);
//        btnPreview.setEnabled(hasSelected);
//        if (hasSelected) {
//            btnPreview.setText("预览" + "(" + resultList.size() + ")");
//        } else {
//            btnPreview.setText("预览");
//        }
//    }
//
//    private LoaderManager.LoaderCallbacks<Cursor> mLoaderCallback = new LoaderManager.LoaderCallbacks<Cursor>() {
//
//        private final String[] IMAGE_PROJECTION = {
//                MediaStore.Images.Media.DATA,
//                MediaStore.Images.Media.DISPLAY_NAME,
//                MediaStore.Images.Media.DATE_ADDED,
//                MediaStore.Images.Media._ID};
//
//        @Override
//        public Loader<Cursor> onCreateLoader(int id, Bundle args) {
//
//            // 根据图片设置参数新增验证条件
//            StringBuilder selectionArgs = new StringBuilder();
//
//            if (imageConfig != null) {
//                if (imageConfig.minWidth != 0) {
//                    selectionArgs.append(MediaStore.Images.Media.WIDTH + " >= " + imageConfig.minWidth);
//                }
//
//                if (imageConfig.minHeight != 0) {
//                    selectionArgs.append("".equals(selectionArgs.toString()) ? "" : " and ");
//                    selectionArgs.append(MediaStore.Images.Media.HEIGHT + " >= " + imageConfig.minHeight);
//                }
//
//                if (imageConfig.minSize != 0f) {
//                    selectionArgs.append("".equals(selectionArgs.toString()) ? "" : " and ");
//                    selectionArgs.append(MediaStore.Images.Media.SIZE + " >= " + imageConfig.minSize);
//                }
//
//                if (imageConfig.mimeType != null) {
//                    selectionArgs.append(" and (");
//                    for (int i = 0, len = imageConfig.mimeType.length; i < len; i++) {
//                        if (i != 0) {
//                            selectionArgs.append(" or ");
//                        }
//                        selectionArgs.append(MediaStore.Images.Media.MIME_TYPE + " = '" + imageConfig.mimeType[i] + "'");
//                    }
//                    selectionArgs.append(")");
//                }
//            }
//
//            if (id == LOADER_ALL) {
//                CursorLoader cursorLoader = new CursorLoader(mCxt,
//                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_PROJECTION,
//                        selectionArgs.toString(), null, IMAGE_PROJECTION[2] + " DESC");
//                return cursorLoader;
//            } else if (id == LOADER_CATEGORY) {
//                String selectionStr = selectionArgs.toString();
//                if (!"".equals(selectionStr)) {
//                    selectionStr += " and" + selectionStr;
//                }
//                CursorLoader cursorLoader = new CursorLoader(mCxt,
//                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_PROJECTION,
//                        IMAGE_PROJECTION[0] + " like '%" + args.getString("path") + "%'" + selectionStr, null,
//                        IMAGE_PROJECTION[2] + " DESC");
//                return cursorLoader;
//            }
//
//            return null;
//        }
//
//        @Override
//        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
//
//            mAllImagePaths.clear();
//            if (data != null) {
//                ArrayList<Image> images = new ArrayList<>();
//                int count = data.getCount();
//                if (count > 0) {
//                    data.moveToFirst();
//                    do {
//                        String path = data.getString(data.getColumnIndexOrThrow(IMAGE_PROJECTION[0]));
//                        String name = data.getString(data.getColumnIndexOrThrow(IMAGE_PROJECTION[1]));
//                        long dateTime = data.getLong(data.getColumnIndexOrThrow(IMAGE_PROJECTION[2]));
//
//                        Image image = new Image(path, name, dateTime);
//                        images.add(image);
//                        mAllImagePaths.add(image.path);
//                        if (!hasFolderGened) {
//                            // 获取文件夹名称
//                            File imageFile = new File(path);
//                            File folderFile = imageFile.getParentFile();
//                            Folder folder = new Folder();
//                            folder.name = folderFile.getName();
//                            folder.path = folderFile.getAbsolutePath();
//                            folder.cover = image;
//                            if (!mResultFolder.contains(folder)) {
//                                ArrayList<Image> imageList = new ArrayList<>();
//                                imageList.add(image);
//                                folder.images = imageList;
//                                mResultFolder.add(folder);
//                            } else {
//                                // 更新
//                                Folder f = mResultFolder.get(mResultFolder.indexOf(folder));
//                                f.images.add(image);
//                            }
//                        }
//
//                    } while (data.moveToNext());
//
//                    mImageAdapter.setData(images);
//
//                    // 设定默认选择
//                    if (resultList != null && resultList.size() > 0) {
//                        mImageAdapter.setDefaultSelected(resultList);
//                    }
//
//                    mFolderAdapter.setData(mResultFolder);
//                    hasFolderGened = true;
//
//                    if (progressDialog != null && progressDialog.isShowing()) {
//                        progressDialog.dismiss();
//                    }
//                }
//            }
//        }
//
//        @Override
//        public void onLoaderReset(Loader<Cursor> loader) {
//
//        }
//    };
//
//    /**
//     * 获取GridView Item宽度
//     *
//     * @return
//     */
//    private int getItemImageWidth() {
//        int cols = getNumColnums();
//        int screenWidth = getResources().getDisplayMetrics().widthPixels;
//        int columnSpace = getResources().getDimensionPixelOffset(R.dimen.space_size);
//        return (screenWidth - columnSpace * (cols - 1)) / cols;
//    }
//
//    /**
//     * 根据屏幕宽度与密度计算GridView显示的列数， 最少为三列
//     *
//     * @return
//     */
//    private int getNumColnums() {
//        int cols = getResources().getDisplayMetrics().widthPixels / getResources().getDisplayMetrics().densityDpi;
//        return cols < 3 ? 3 : cols;
//    }
//
//
//    // 返回已选择的图片数据
//    private void complete() {
//        Intent data = new Intent();
//        data.putStringArrayListExtra(EXTRA_RESULT, resultList);
//        setResult(RESULT_OK, data);
//        finish();
//    }
//
//    @Override
//    public void onSaveInstanceState(Bundle outState) {
//        captureManager.onSaveInstanceState(outState);
//        super.onSaveInstanceState(outState);
//    }
//
//    @Override
//    protected void onRestoreInstanceState(Bundle savedInstanceState) {
//        captureManager.onRestoreInstanceState(savedInstanceState);
//        super.onRestoreInstanceState(savedInstanceState);
//    }
//}
